package com.uade.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;

public class Compra implements Serializable, Valuable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -6055092950387687336L;
	private static Logger log = Logger.getLogger(Compra.class);
	private long id;
	private String idModulo;
	private double coordenadaX;
	private double coordenadaY;
	private String fecha;
	private Usuario usuario;
	private List<ItemCompra> items = new ArrayList<ItemCompra>();
	private double montoTotal;
	private String estado;

	public Compra() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Compra(long id, String idModulo, double coordenadaX,
			double coordenadaY, String fecha, Usuario usuario,
			List<ItemCompra> items, double montoTotal, String estado) {
		super();
		this.id = id;
		this.idModulo = idModulo;
		this.coordenadaX = coordenadaX;
		this.coordenadaY = coordenadaY;
		this.fecha = fecha;
		this.usuario = usuario;
		this.items = items;
		this.montoTotal = montoTotal;
		this.estado = estado;
	}

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}

	public String getIdModulo() {
		return idModulo;
	}

	public void setIdModulo(String idModulo) {
		this.idModulo = idModulo;
	}

	public double getCoordenadaX() {
		return coordenadaX;
	}

	public void setCoordenadaX(double coordenadaX) {
		this.coordenadaX = coordenadaX;
	}

	public double getCoordenadaY() {
		return coordenadaY;
	}

	public void setCoordenadaY(double coordenadaY) {
		this.coordenadaY = coordenadaY;
	}

	public String getFecha() {
		return fecha;
	}

	public void setFecha(String fecha) {
		this.fecha = fecha;
	}

	public List<ItemCompra> getItems() {
		return items;
	}

	public void setItems(List<ItemCompra> items) {
		this.items = items;
	}

	public double getPrecio() {
		this.montoTotal = 0.0;
		if (null != this.items && !this.items.isEmpty()) {

			for (ItemCompra itemVenta : this.items) {
				this.montoTotal += itemVenta.getPrecio();
			}

		}
		return this.montoTotal;
	}

	/**
	 * Retorna el string xml de la venta con los datos de la compra
	 * 
	 * @return
	 */
	public String getXmlVenta() {

		StringBuffer xml = new StringBuffer();
		// Se agrega el header
		xml.append("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?> ");
		xml.append("<venta>");
		xml.append("<nroVenta>" + String.valueOf(getId()) + "</nroVenta>");
		xml.append("<idModulo>4</idModulo>");
		xml.append("<coordenadaX>" + String.valueOf(this.getCoordenadaX())
				+ "</coordenadaX>");
		xml.append("<coordenadaY>" + String.valueOf(this.getCoordenadaY())
				+ "</coordenadaY>");
		xml.append("<fecha>" + getFecha() + "</fecha>");
		xml.append("<montoTotal>" + String.valueOf(getPrecio())
				+ "</montoTotal>");
		// Items
		xml.append("<itemsVenta>");
		for (ItemCompra item : getItems()) {
			xml.append("<item>");
			xml.append("<codigoArticulo>"
					+ String.valueOf(item.getArticulo().getIdProductoDeposito())
					+ "</codigoArticulo>");
			xml.append("<cantidad>" + String.valueOf(item.getCantidad())
					+ "</cantidad>");
			xml.append("</item>");
		}
		xml.append("</itemsVenta>");
		xml.append("</venta>");
		log.info("Mensaje de venta a Logistica y monitoreo: " + xml.toString());
		return xml.toString();

	}
}
